perm filename U11[1,BGB]2 blob sn#145812 filedate 1975-02-18 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00022 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	/NOTATION:
C00005 00003	LOC	NXT	*SOURCE MODE 0 (REGISTER) GET SOURCE DATA
C00008 00004	_____________________________________________________________________
C00010 00005	LOC	NXT	* SOURCE BYTE ODD
C00012 00006	LOC	NXT	* DEST, MODE 0 (REGISTER), GET DEST DATA, OP, AND REPLACE
C00015 00007	LOC	NXT	* DEST, MODE 1 (REG.DEFERRED)      GET DEST DATA, OP, AND REPLACE
C00017 00008
C00018 00009	LOC	NXT	* DESTINATION MODE 0, BYTE
C00020 00010
C00021 00011
C00022 00012
C00023 00013	LOC	NXT	* JMP
C00025 00014	LOC	NXT	* RTS
C00026 00015	LOC	NXT	* WAIT
C00027 00016	LOC	NXT	* EMT TRAP (VECTOR LOC=30)
C00028 00017	LOC	NXT	* TRAP (VECTOR LOC=34)
C00029 00018	LOC	NXT	* CONSOLE EXAMINE SWITCH - FIRST TIME (DON'T INC P[17])
C00031 00019
C00032 00020
C00033 00021
C00034 00022	
C00035 ENDMK
C⊗;
/NOTATION:
/ 1. MICRO ROUTINES BEGIN WITH A COMMENT PREFIXED BY "*".
/ 2. ALL OTHER COMMENTS ARE PREFIXED BY SLASH "/".
/ 3. R[N] REFERS TO SCRATCH PAD REGISTER N,
/    R[7] IS ALSO REFERRED TO AS "PC".
/ 4. R[S] REFERS TO THE REGISTER SPECIFIED IN THE SOURCE FIELD
/    OF THE CURRENT INSTRUCTION, IR<8:6>
/    R[D] REFERS TO THE REGISTER SPECIFIED IN THE DESTINATION FIELD
/    OF THE CURRENT INSTRUCTION, IR<2:0>
/ 5. K[N] REFERS TO A LOCATION OF THE CONSTANTS CHIP THAT CONTAINS N.
/ 6. "BUT" STANDS FOR "BRANCH ON MICRO TEST".

LOC	NXT	* INSTRUCTION FETCH
062	053	F-1	BA←PC; DATI
053	365	F-2	B←PC+2
365	364	F-3	PC←B; CKOFF
364	061	F-4	B,IR←UNIBUS DATA
061	001	F-5	B←B SEX; BUT IR DECODE

/ IF DOUBLE OP INST GOTO S0-1 THRU S7-1 DEPENDING ON SOURCE MODE
/ IF SINGLE OP INST GOTO D0-1 THRU D7-1 DEPENDING ON DESTINATION MODE (INCLUDING JSR)
/ IF BRANCH, CHANGE PC GOTO B-1
/ IF BRANCH, PC UNCHANGED GOTO B2-2
/ IF CLEAR OR SET COND CODE(S) GOTO CCM-1
/ IF INST=RTS GOTO R1-1
/ IF INST=RTI GOTO R2-1
/ IF INST=WAIT GOTO W-1
/ IF INST=HALT GOTO H-1
/ IF INST=RESET GOTO RST-1
/ IF INST=EMT GOTO ET-1
/ IF INST=BPT GOTO BT-1
/ IF INST=IOT GOTO IT-1
/ IF INST=TRAP GOTO T-1
/ IF RESERVED INSTRUCTION (NONE OF THE ABOVE) GOTO RT-1
LOC	NXT	*SOURCE MODE 0 (REGISTER) GET SOURCE DATA
		/GET TO S0-1 FROM F-5 VIA BUT IR DECODE <11:9>=0
201	007	S0-1  B←R[S]; BUT BYTE
		/IF BYTE INST GOTO SBE-1 (MUST BE EVEN BYTE)
007	001	S0-2 R[10]←B; BUT DESTINATION
		/IF IR<5:3> =0 GOTO D0-1
		/           =1 GOTO D1-1
		/           =2 GOTO D2-1
		/           =3 GOTO D3-1
		/           =4 GOTO D4-1
		/           =5 GOTO D5-1
		/           =6 GOTO D6-1
		/           =7 GOTO D7-1
_____________________________________________________________________
LOC	NXT	*SOURCE MODE 1 (REGISTER DEFERRED) GET SOURCE DATA
		/GET TO S1-1 FROM F-5 VIA BUT IR DECODE <11:9>=1
203	244	S1-1  BA←R[S]; DATI; CKOFF; ALBYT
		/GET TO S1-2 FROM S2-3 VIA GOTO
		/GET TO S1-2 FROM S3-5 VIA GOTO
		/GET TO S1-2 FROM S6-5 VIA GOTO
244	007	S1-2 B←UNIBUS DATA; BUT BYTE; GOTO S0-2
		/IF ODD BYTE GOTO SBO-1
		/IF EVEN BYTE GOTO SBE-1
		/IF NOT BYTE FALL THROUGH TO S0-2
_____________________________________________________________________
LOC	NXT	*SOURCE MODE 2 (AUTO-INCREMENT) GET SOURCE DATA
		/GET TO S2-1 FROM F-5 VIA BUT IR DECODE <11:9>=2
205	301	S2-1  BA←R[S]; DATI; ALBYT
301	014	S2-2  B←R[S]+1+BYTE;BAR
		/GET TO S2-3 FROM S4-1 VIA GOTO
014	244	S2-3  R[S]←B; CKOFF; GOTO S1-2
_____________________________________________________________________
LOC	NXT	*SOURCE MODE 3 (AUTO-INC DEFERRED) GET SOURCE DATA
		/GET TO S3-1 FROM F-5 VIA BUT IR DECODE <11:9>=3
207	016	S3-1  BA←R[S]; DATI (MUST BE AN EVEN ADDRESS HERE)
016	017	S3-2  B←R[S]+2
		/GET TO S3-3 FROM S5-1 VIA GOTO
017	134	S3-3  R[S]←B; CKOFF
		/GET TO S3-4 FROM S7-5 VIA GOTO
134	274	S3-4  B←UNIBUS DATA
274	244	S3-5  BA←B; DATI; CKOFF; GOTO S1-2; ALBYT
_____________________________________________________________________
LOC	NXT	*SOURCE MODE 4 (AUTO DECREMENT) GET SOURCE DATA
		/GET TO S4-1 FROM F-5 VIA BUT IR DECODE <11:9>=4
211	014	S4-1  B,BA←R[S]-1-BYTE.BAR; DATI; ENABOVER; GOTO S2-3; ALBYT
_____________________________________________________________________
LOC	NXT	*SOURCE MODE 5 (AUTO DECREMENT DEFERRED) GET SOURCE DATA
		/GET TO S5-1 FROM F-5 VIA BUT IR DECODE <11:9>=5
213	017	S5-1  B,BA←R[S]-2; DATI (ADDR MUST BE EVEN); ENABOVER; GOTO S3-3
_____________________________________________________________________
LOC	NXT	*SOURCE MODE 6 (INDEXED) GET SOURCE DATA
		/GET TO S6-1 FROM F-5 VIA BUT IR DECODE <11:9>=6
215	025	S6-1	BA←PC; DATI(ADDR MUST BE EVEN)
025	026	S6-2	B←PC+2
026	027	S6-3	PC←B; CKOFF
027	030	S6-4	B←UNIBUS DATA
030	244	S6-5	BA←B+R[S]; DATI; CKOFF; GOTO S1-2; ALBYT
_____________________________________________________________________
LOC	NXT	*SOURCE MODE 7 (INDEXED DEFERRED) GET SOURCE DATA
		/GET TO S7-1 FROM F-5 VIA BUT IR DECODE <11:9>=7
217	032	S7-1	BA←PC; DATI(ADDR MUST BE EVEN)
032	033	S7-2	B←PC+2
033	034	S7-3	PC←B; CKOFF
034	035	S7-4	B←UNIBUS DATA
035	134	S7-5	BA←B+R[S]; DATI(ADDR MUST BE EVEN); CKOFF; GOTO S3-4
LOC	NXT	* SOURCE BYTE ODD
/ GET TO SBO-1 FROM S1-2 VIA BUT BYTE (BYTE INST. AND SOURCE DATA ODD ADDR)
067	346	SBO-1	SHIFT B RIGHT; F SHIFT
346	324	SBO-2	SHIFT B RIGHT; F SHIFT
324	340	SBO-3	SHIFT B RIGHT; F SHIFT
340	361	SBO-4	SHIFT B RIGHT; F SHIFT
361	050	SBO-5	SHIFT B RIGHT; F SHIFT
050	020	SBO-6	SHIFT B RIGHT; F SHIFT
020	052	SBO-7	SHIFT B RIGHT; F SHIFT
052	047	SBO-8	SHIFT B RIGHT; GOTO SBE-1
_____________________________________________________________________
LOC	NXT	* SOURCE BYTE EVEN
		/GET TO SBE-1 FROM SBO-8 VIA GOTO
		/GET TO SBE-1 FROM S1-2 VIA BUT BYTE (BYTE INST & SOURCE DATA EVEN ADDR)
		/GET TO SBE-1 FROM S0-1 VIA BUT BYTE (BYTE INST)
047	001	SBE-1 R[10]←B SEX; BUT DESTINATION
	/ IF IR<5:3> =0 GOTO D0-1
	/            =1 GOTO D1-1
	/            =2 GOTO D2-1
	/            =3 GOTO D3-1
	/            =4 GOTO D4-1
	/            =5 GOTO D5-1
	/            =6 GOTO D6-1
	/            =7 GOTO D7-1
---------------------------------------------------------------------
LOC	NXT	* DEST, MODE 0 (REGISTER), GET DEST DATA, OP, AND REPLACE
		/ GET TO D0-1 FROM S0-2 VIA BUT DESTINATION (IR<5:3>=0)
		/ GET TO D0-1 FROM SBE-1 VIA BUT DESTINATION (IR<5:3>=0)
101	154	D0-1 B←R[D]; BUT MOVE
		/ IF INST=MVE,BAR (OTHER THAN MOVE)AND BYTE GOTO DB0-1
		/ IF INST=MOVE AND BYTE GOTO MB-0
		/ IF INST=MOVE AND BYTE,BAR GOTO D0-3A
		/ IF INST=MOVE,BAR AND BYTE,BALL FALL THRU TO D0-2
157	142	D0-2  R[11]←B; BUT UNARY
		/ IF INST=JMP OR JSR GOTO ERT-1 (ILLEGAL INST. TRAP)
		/ IF INST=SWAB GOTO SB1-1
		/ IF INST=OTHER UNARY(CLR,COM,INC,DEC,NEG,ADC,SBC,TST,ROR,ROL,ASR,ASL)GOTO U1-1
		/ GET TO D0-3 FROM U1-1 VIA GOTO
		/ GET TO D0-3 FROM D0-1 VIA BUT BYTE (INST=MOVE AND BYTE,BAR)
162	332	D0-3 B←R[10] OP B; BUT NONMOD
		/ THERE EXISTS A D03-A WHICH IS IDENTICAL TO D0-3 EXCEPT LOC=155
		/ GET TO D0-3A FROM SB1-B VIA GOTO
		/ IF NONMOD GOTO B2-2 (BUT SERVICE)
		/ IF NOT NONMOD FALL THRU TO D0-4
		/ GET TO D0-4 FROM R1-6 VIA GOTO
332	040	D0-4 R[D]←B; BUT SERVICE
		/ PRIORITIES ARE LISTED HIGHEST TO LOWEST
		/ IF T BIT TRAP GOTO BT-1
		/ IF STACK OVERFLOW GOTO ERT1A
		/ IF POWERFAIL GOTO PF-1
		/ IF BR7 GOTO BG-1
		/ IF BR6 GOTO BG-1
		/ IF INTERNAL LINE CLOCK GOTO LC-1
		/ IF BR5 GOTO BG-1
		/ IF BR4 GOTO BG-1
		/ IF UART RECEIVE GOTO URTR
		/ IF UART TRANSMIT GOTO URTX
		/ IF CONSOLE STOP GOTO H-1
		/ IF NONE OF THE ABOVE GOTO F-1
LOC	NXT	* DEST, MODE 1 (REG.DEFERRED)      GET DEST DATA, OP, AND REPLACE
LOC	NXT	* DEST, MODE 2 (AUTO-INC)          GET DEST DATA, OP, AND REPLACE
LOC	NXT	* DEST, MODE 3 (AUTO-INC DEFERRED) GET DEST DATA, OP, AND REPLACE
LOC	NXT	* DEST, MODE 4 (AUTO-DEC)          GET DEST DATA, OP, AND REPLACE
LOC	NXT	* DEST, MODE 5 (AUTO-DEC DEFERRED) GET DEST DATA, OP, AND REPLACE
LOC	NXT	* DEST, MODE 6 (INDEXED)           GET DEST DATA, OP, AND REPLACE
LOC	NXT	* DEST, MODE 7 (INDEXED DEFERRED)  GET DEST DATA, OP, AND REPLACE
LOC	NXT	* DESTINATION MODE 0, BYTE
		/GET TO DB0-1 FROM D0-1 VIA BUT BYTE (BYTE INST AND MOVE,BAR)
156	144	DB0-1 R[11],B←B SEX; BUT UNARY
		/ IF UNARY OTHER THAN JSR, JMP OR SWAB
		/(CLR,COM,INC,DEC,NEG,ADC,SBC,TST,ROR,ROL,ASR,ASL) GOTO U3-1
304	040	DB0-3 R[D]<7:0>←B; BUT SERVICE, GOTO F-1

LOC	NXT	* DESTINATION ODD BYTE
		/GET TO D0-1 FROM D1-2 VIA BUT BYTE (BYTE INST AND ODD ADDR)
270	123	D0-1 SHIFT B RIGHT; F SHIFT
123	124	D0-2 SHIFT B RIGHT; F SHIFT
124	125	D0-3 SHIFT B RIGHT; F SHIFT
125	126	D0-4 SHIFT B RIGHT; F SHIFT
126	127	D0-5 SHIFT B RIGHT; F SHIFT
127	130	D0-6 SHIFT B RIGHT; F SHIFT
130	131	D0-7 SHIFT B RIGHT; F SHIFT
131	132	D0-8 SHIFT B RIGHT
132	145	D0-9 R[11],B_B SEX; BUT UNARY

LOC	NXT	* DESTINATION EVEN BYTE
LOC	NXT	* BINARY OPERATORS GET SINGLE OPERAND B AND B[10]
LOC	NXT	* MOVB INST
LOC	NXT	* BRANCH, CHANGE PC
LOC	NXT	* CONDITION CODE MASK (FOR BOTH SET AND CLEAR)
LOC	NXT	* CLEAR CONDITION CODES
LOC	NXT	* SET CONDITION CODES
LOC	NXT	* SWAB, MODE 0
LOC	NXT	* SWAB, NOT MODE 0
LOC	NXT	* JMP
		/GET TO J1-1 FROM D1-1 VIA BUT JSRMP (INST=JMP)
		/GET TO J1-1 FROM D2-3 VIA BUT JSRMP (INST=JMP)
		/GET TO J1-1 FROM D3-5 VIA BUT JSRMP (INST=JMP)
		/GET TO J1-1 FROM D6-5 VIA BUT JSRMP (INST=JMP)
204	260	J1-1	NOP
		/J1-1 MUST BE A NOP BECAUSE FOLLOWING A CKOFF, THE AMX WILL
		/BE FORCED TO TAKE DATA FROM THE UNIBUS.
260	040	J1-2	PC_B; BUT SERVICE

LOC	NXT	* JSR
		/GET TO J2-1 FROM D1-1 VIA BUT JSRMP (INST=JSR)
		/GET TO J2-1 FROM D2-3 VIA BUT JSRMP (INST=JSR)
		/GET TO J2-1 FROM D3-5 VIA BUT JSRMP (INST=JSR)
		/GET TO J2-1 FROM D6-5 VIA BUT JSRMP (INST=JSR)
212	261	J2-1	NOP
		/J2-1 MUST BE A NOP BECAUSE FOLLOWING A CKOFF, THE AMX WILL
		/BE FORCED TO TAKE DATA FROM THE UNIBUS.
261	262	J2-1A R[11]_B
262	214	J2-2	B,BA←R[6]-2; ENABOVER
214	206	J2-3	R[6]←B; CKOFF; DATO
206	216	J2-4	DRIVERS_R[S]
216	263	J2-5	B9 ← PC
263	264	J2-6	R[S]_B
264	265	J2-7	B_R[11]
265	040	J2-8	PC_B; BUT SERVICE
LOC	NXT	* RTS
		/GET TO R1-1 FROM F-5 VIA BUT IR DECODE (INST=RTS)
005	221	R1-1	BA←R[6]; DATI
221	222	R1-2	B←R[6]+2
222	223	R1-3	R[6]←B
223	224	R1-4	B←R[D]
224	225	R1-5	PC←B; CKOFF
225	332	R1-6	B←UNIBUS DATA; GOTO D0-4

LOC	NXT	* RTI
		/GET TO R2-1 FROM F-5 VIA BUT IR DECODE (INST=RTI)
227	230	R2-1	BA←R[6]; DATI
230	231	R2-2	B←R[6]+2
231	232	R2-3	R[6]←B; CKOFF
232	234	R2-4	PC←UNIBUS DATA
		/THERE IS NO R2-5 ANYMORE.
234	235	R2-6	BA←R[6]; DATI
235	236	R2-7	B←R[6]+2
236	237	R2-8	R[6]←B; CKOFF
237	305	R2-9	PS←UNIBUS DATA; GOTO B2-2 (BUT SERVICE)
LOC	NXT	* WAIT
		/GET TO W-1 FROM F-5 VIA BUT IR DECODE (INST=WAIT)
		/GET TO W-1 FROM W-1 VIA GOTO IF BUT SERVICE IS FALSE
063	040	W-1	BUT SERVICE

LOC	NXT	* HALT
LOC	NXT	* EMT TRAP (VECTOR LOC=30)
LOC	NXT	* BREAKPOINT TRAP (VECTOR LOC=14) AND T BIT TRACE TRAP
LOC	NXT	* IOT (VECTOR LOC=20)
LOC	NXT	* TRAP (VECTOR LOC=34)
LOC	NXT	* RESERVED INST TRAP (VECTOR LOC=10)
LOC	NXT	* ERROR TRAP: BUS ERROR, STACK OVERFLOW, ILLEGAL INST(VECTOR LOC=4)
LOC	NXT	* CONSOLE START SWITCH
LOC	NXT	* CONSOLE EXAMINE SWITCH - FIRST TIME (DON'T INC P[17])
LOC	NXT	* CONSOLE EXAMINE SWITCH - OTHER TIMES (INC P[17])
LOC	NXT	* CONSOLE DEPOSIT SWITCH - FIRST TIME (DON'T INC P[17])
LOC	NXT	* CONSOLE DEPOSIT SWITCH - FIRST TIME (DON'T INC P[17])
LOC	NXT	* CONSOLE DEPOSIT SWITCH - OTHER TIMES (INC P[17])
LOC	NXT	* CONSOLE CONTINUE SWITCH
LOC	NXT	* CONSOLE LOAD SWITCH
LOC	NXT	* POWER FAIL (VECTOR LOC=24)
LOC	NXT	* RESTART FROM POWER FAIL (VECTOR LOC=24)
LOC	NXT	* INTERRUPT SERVICING
LOC	NXT	* BUS GRANT SERVICE
LOC	NXT	* NOP - BRANCH CONDITION NOT TRUE (PC UNCHANGED)
LOC	NXT	* RESET
LOC	NXT	* DOUBLE BUS ERROR, GOTO HALT
LOC	NXT	* UART XMIT (VECTOR LOC 64)
LOC	NXT	* UART RECEIVE (VECTOR LOC 60)
LOC	NXT	* LINE CLOCK (VECTOR LOC 100)